package ec.linde.modulos.proyectos;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.component.datatable.DataTable;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import ec.linde.modulos.proyectos.servicio.ServicioRdo;
import ec.linde.persistencia.entidades.proyectos.Rdo;

/**
 * TODO: Agregar descripcion
 * 
 * @FechaCreacion: 29/03/2013
 * @author: Alex Carrillo
 * @FechaModificacion: 29/03/2013
 * @author: Alex Carrillo
 * @version: 1.0
 */
@ManagedBean
@ViewScoped
public class RdoPlanillaBean {

	/**
	 * Servicios
	 */
	@EJB
	private ServicioRdo servicioRdo;

	/**
	 * Atributos Forma
	 */
	private Rdo rdo;
	private boolean planillaCliente;

	/**
	 * Listados 1. Lista Lazy DataModel 2. Lista Detalles 3. Listas Combo
	 */
	private LazyDataModel<Rdo> listaRdo;
	/**
	 * UI
	 */
	private DataTable dtRdo;

	/**
	 * PostContrutor
	 */
	@PostConstruct
	public void init() {

		listaRdo = new LazyDataModel<Rdo>() {

			private static final long serialVersionUID = 1L;

			@Override
			public List<Rdo> load(int startIndex, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
				List<Rdo> lista = new ArrayList<Rdo>();

				boolean ordenar = sortOrder == SortOrder.ASCENDING ? true : false;
				lista = servicioRdo.obtenerListaPorPagina(startIndex, pageSize, sortField, ordenar, filters);

				listaRdo.setRowCount(servicioRdo.contarPorCriterio(filters));

				return lista;
			}
		};

	}

	public String generarPlanilla() {
		if (rdo != null) {
			if (planillaCliente) {
				return "planillaCliente.xhtml?faces-redirect=true&idRdo=" + rdo.getId();
			} else {
				return "planillaContratista.xhtml?faces-redirect=true&idRdo=" + rdo.getId();
			}
		} else {
			addMessage(FacesMessage.SEVERITY_INFO, null, "Selccione un registro");
		}
		return "";
	}

	protected void addMessage(Severity severityError, final String id, final String detail) {
		FacesMessage errorMessage = new FacesMessage();
		errorMessage.setSummary("");
		errorMessage.setDetail(" " + detail);
		errorMessage.setSeverity(severityError);
		FacesContext.getCurrentInstance().addMessage(id, errorMessage);
	}

	/**
	 * Get del atributo rdo
	 * 
	 * @return el valor del atributo rdo
	 */
	public Rdo getRdo() {
		return rdo;
	}

	/**
	 * Set del atributo rdo
	 * 
	 * @param proyecto
	 *            valor para asignar al atributo rdo
	 */
	public void setRdo(Rdo rdo) {
		this.rdo = rdo;
	}

	public LazyDataModel<Rdo> getListaRdo() {
		return listaRdo;
	}

	public void setListaRdo(LazyDataModel<Rdo> listaRdo) {
		this.listaRdo = listaRdo;
	}

	public DataTable getDtRdo() {
		return dtRdo;
	}

	public void setDtRdo(DataTable dtRdo) {
		this.dtRdo = dtRdo;
	}

	public boolean isPlanillaCliente() {
		return planillaCliente;
	}

	public void setPlanillaCliente(boolean planillaCliente) {
		this.planillaCliente = planillaCliente;
	}

}
